跳到主要内容

BM19 寻找峰值

https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76

二分查找不只可以用于查找排序后的数据,也可以通过其通过一个中间值比较两边的特性找到峰值

因为题目中的 nums[i] != nums[i + 1] 条件,当中间元素 mid 不是峰时,一定有一边比 mid 中间值大,假设右边的值,即 mid+1 位置的值大于 mid 的值,则右边一定存在峰,因为右边的值从mid开始要么是 /\ 这个单调性,要么是 / 这种单调性,两种都一定存在峰

package main

/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
func findPeakElement(nums []int) int {
left, right := 0, len(nums)-1
for left < right {
mid := (right-left)/2 + left
if nums[mid] < nums[mid+1] {
left = mid + 1
} else {
right = mid
}
}
return left
}

23/5/10

花费 37 分钟没有做出来,看了题解才知道怎么做